/*
 * Tactica1MedioCentro.java
 *
 * Created on 9 de abril de 2007, 20:05
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.tikitaka.tactica;

import futbol.tacticas.*;
import java.awt.Point;

/**
 *
 * @author leamsi78
 */
public class Tactica1MedioCentro extends Estado {
    
    /** Creates a new instance of Tactica1MedioCentro */
    public Tactica1MedioCentro() {
    }
    
    public void Entrar(Object obj)
    {
    }
    
    public void Ejecutar(Object obj)
    {
        Tactica1 tactica = (Tactica1)obj;
        Tactica1.JugadorBase j = tactica.jugador[tactica.MEDIO_CENTRO];
        if (tactica.jugadorMasCercaBalon != tactica.MEDIO_CENTRO)
        {
            if (tactica.jugadorMasCercaBalon == tactica.DEFENSA_DERECHO)
            {
                Point defensaIzquierdo = tactica.equipo.getPosicion(tactica.DEFENSA_DERECHO);
                tactica.comandos.add(new ComandoIrA(tactica.MEDIO_CENTRO, defensaIzquierdo.x+22, defensaIzquierdo.y - 40));
            }
            else if (tactica.jugadorMasCercaBalon == tactica.DEFENSA_IZQUIERDO)
            {
                Point defensaIzquierdo = tactica.equipo.getPosicion(tactica.DEFENSA_IZQUIERDO);
                tactica.comandos.add(new ComandoIrA(tactica.MEDIO_CENTRO, defensaIzquierdo.x+22, defensaIzquierdo.y + 20));
            }
            else
            {
                //Mantener a los jugadores del centro del campo en una posicion relativa al balon
                int desplazamientoX = (int)(tactica.balon.getPosicionActual().getX() / 5);
                int desplazamientoY = 0;
                double distanciaY = tactica.balon.getPosicionActual().getY() - tactica.jugador[tactica.MEDIO_CENTRO].getPosicion().getY();
                if (distanciaY > 40.0) 
                {
                    desplazamientoY += (int)((distanciaY - 40.0) / 2);
                    if (desplazamientoY > 50.0) desplazamientoY = 50;
                }
                if (distanciaY < -40.0)
                {
                    desplazamientoY += (int)((distanciaY + 40.0) / 2);
                    if (desplazamientoY < -50.0) desplazamientoY = -50;
                }
                tactica.comandos.add(new ComandoIrA(tactica.MEDIO_CENTRO, 10.0 + desplazamientoX, 0 + desplazamientoY));
            }
        }
        else
        {
            //Tenemos que ir hacia el balon y cuando estemos a menos de 10 entonces golpear el balon
            if (!j.cercaBalon())
                tactica.jugador[tactica.MEDIO_CENTRO].irAlBalon();
            else if (j.jugadorCerca() || j.getPosicion().x > 50)
            {
//            double ran = Math.random();
//            int rand = (int)Math.round(ran) + 7;
//            tactica.comandos.add(new ComandoPase(tactica.MEDIO_CENTRO, rand));
                int pasarA = (int)(Math.random()*2);
                if (pasarA == 0) j.pasarA(tactica.MEDIO_DERECHO);
                else if (pasarA == 1) j.pasarA(tactica.DELANTERO);
            else j.pasarA(tactica.MEDIO_IZQUIERDO);
            }
            else 
                j.llevarBalon(new Point(160, 0));
        }
    }
    
    public void Salir(Object obj)
    {
    }
    
    public boolean Mensaje(Object obj, Mensaje mensaje)
    {
        return true;
    }
}
